//
//  AppDelegate.swift
//  Webo10
//
//  Created by ChengXiwu on 2017/7/27.
//  Copyright © 2017年 ChengXiwu. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // 设置全局外观        
        setupAppearance()
        
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.backgroundColor = UIColor.white
        window?.rootViewController = defaultRootViewController
        window?.makeKeyAndVisible()
        
        // 监听通知
        NotificationCenter.default.addObserver(forName: WBSwitchRootViewControllerNotification,           // 通知名称
                                               object: nil,     // 发送通知的对象,nil表示监听所有通知
                                               queue: nil)      // 通知队列,nil表示主线程
        { (notification) in
            
            logPrint(Thread.current)
            logPrint(notification)
            // 切换控制器
            let vc = notification.object != nil ? WelcomViewController() : MainViewController()
            self.window?.rootViewController = vc
        }
        
        return true
    }
    
    deinit {
        // 注销通知,可注销指定的通知
        NotificationCenter.default.removeObserver(self,         // 监听者
                                                  name: WBSwitchRootViewControllerNotification,  // 监听的通知
                                                  object: nil)  // 发送通知的对象
    }

    // 设置全局外观 - 一般会在此处设置
    private func setupAppearance(){
        // 修改导航栏外观
        UINavigationBar.appearance().tintColor = WBAppearanceTintColor
        // 修改tabBar外观
        UITabBar.appearance().tintColor = WBAppearanceTintColor
    }
    
}

extension AppDelegate{
    
    fileprivate var defaultRootViewController: UIViewController{
        
        // 判断是否登录,如果已经登录,则判断是否有新版本,有新版本显示新特性,否则显示欢迎
        if UserAccountViewModel.userAccount.userIsLogon {
            return isNewVersion ? NewFeatureViewController() : WelcomViewController()
        }
        
        return MainViewController()
        
    }
    
    private var isNewVersion: Bool{
        
        // 得到当前版本
        let version = Double(CURRENT_VERSION)!
        logPrint("当前版本 \(version)")
        // 获取早期版本
        let sandboxVersionKey = "sandboxVersionKey"
        let sandboxVersion = UserDefaults.standard.double(forKey: sandboxVersionKey)
        logPrint("之前版本 \(sandboxVersion)")
        // 使用当前版本覆盖早期版本
        UserDefaults.standard.set(version, forKey: sandboxVersionKey)
        // UserDefault设置数据时，不是马上写入，而是根据时间戳定时把缓存数据写入磁盘。所以使用set设置数据后，为了方式数据丢失，应该马上调用synchornize方法强制把数据写入磁盘
        UserDefaults.standard.synchronize()
        return version > sandboxVersion
    }
    
}
